package com.empire.module.member.service.user;

import com.baomidou.mybatisplus.extension.service.IService;
import com.empire.framework.common.pojo.PageResult;
import com.empire.module.member.controller.admin.user.vo.*;
import com.empire.module.member.dal.dataobject.presentation.PresentationDO;
import com.empire.module.member.dal.dataobject.user.MemberUserDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 会员用户 Service 接口
 *
 * @author 未来源码
 */
public interface MemberUserService extends IService<MemberUserDO> {

    /**
     * 通过用户 ID 查询用户
     *
     * @param id 用户ID
     * @return 用户对象信息
     */
    MemberUserDO getUser(Long id);

    /**
     * 通过用户 证件号码 查询人员
     *
     * @param idcard 人员证件号码
     * @return 人员对象信息
     */
    MemberUserDO getByIdCard(String idcard);

    /**
     * 【管理员】更新会员用户
     *
     * @param updateReqVO 更新信息
     */
    Long createUser(@Valid MemberUserSaveReqVO updateReqVO);

    /**
     * 【管理员】更新会员用户
     *
     * @param updateReqVO 更新信息
     */
    void updateUser(@Valid MemberUserUpdateReqVO updateReqVO);

    /**
     * 【管理员】绑定部门和会员的关系
     *
     * @param updateReqVO 更新信息
     */
    void bindDeptMember(@Valid DeptMemberUserUpdateReqVO updateReqVO);

    /**
     * 【管理员】获得会员用户分页
     *
     * @param pageReqVO 分页查询
     * @return 会员用户分页
     */
    PageResult<MemberUserDO> getUserPage(MemberUserPageReqVO pageReqVO);

    /**
     * 【管理员】获得人员带预警最后轨迹分页
     *
     * @param pageReqVO 分页查询
     * @return 会员用户分页
     */
    PageResult<MemberUserDO> getUserCurInfoPage(MemberUserPageReqVO pageReqVO);

    /**
     * 查询我可以管的人员集合
     *
     * @return 人员ID集合
     */
    List<Long> getMyUserIdList();

    /**
     * 获得指定用户分组下的用户数量
     *
     * @param groupId 用户分组编号
     * @return 用户数量
     */
    Long getUserCountByGroupId(Long groupId);

    /**
     * 获得指定会员标签下的用户数量
     *
     * @param tagId 用户标签编号
     * @return 用户数量
     */
    Long getUserCountByTagId(Long tagId);

    /**
     * 批量导入会员
     *
     * @param importUsers     导入会员列表
     * @param isUpdateSupport 是否支持更新
     * @return 导入结果
     */
    MemberImportRespVO importUserList(List<MemberImportExcelVO> importUsers, boolean isUpdateSupport);

    /**
     * 删除人员
     *
     * @param id 人员ID
     * @return 返回结果成功/失败
     */
    Boolean deleteUser(Long id);
}
